\frameforsection[t]{
  \renewcommand\currentblocktitle{\hypertarget{3-1}{原码、反码、补码}}
  \outonlyblock{
    \twocolumns{
      \begin{itemize}
	\item 原码、反码和补码是3种用来表示有符号二进制数的方法
	\item 原码表示法
	  \begin{itemize}
	    \item 符号位：最高位，0-正，1-负
	    \item 数值位：其他位
	    \item 8位有符号数原码\\
	      $+8_{10}=(0001000)_{\text{原}}$\\
	      $-8_{10}=(1001000)_{\text{原}}$
	  \end{itemize}
	\item 反码表示法
	  \begin{itemize}
	    \item 正数的反码=正数的原码
	    \item 负数的反码=负数的原码的数值位求反
	  \end{itemize}
      \end{itemize}
    }{
      \begin{itemize}
	\item $\cdots$
	  \begin{itemize}
	    \item 8位有符号数反码\\
	      $+8_{10}=(0001000)_\text{原}=(0001000)_\text{反}$\\
	      $-8_{10}=(1001000)_\text{原}=(1110111)_\text{反}$\\
	  \end{itemize}
	\item 补码表示法
	  \begin{itemize}
	    \item 正数的补码=正数的原码
	    \item 负数的补码=负数的反码+1
	    \item 8位有符号数反码\\
	      $+8_{10}=(0001000)_\text{原}=(0001000)_\text{补}$\\
	      $-8_{10}=(1110111)_\text{反}=(1111000)_\text{补}$\\
	  \end{itemize}
	\item +0、-0的原码、反码不相等，而补码相等，补码表示具有唯一性
      \end{itemize}
    }[c]
  }
  \renewcommand\currentblocktitle{\hypertarget{3-2}{有符号数使用补码表示对于加法带来的便利}}
  \outonlyblock{
    \begin{itemize}
      \item 有符号数使用补码后，可以将补码直接相加，无需考虑数的正负，相加的结果仍然为原来的数相加
	的结果的补码，故简化了电路
      \item 8位有符号数用补码表示后相加的示例
	\begin{itemize}
	  \item $\because (-5)_{10}+(3)_{10}=(-2)_{10}=(10000010)_\text{原}=(11111101)_\text{反}=(11111110)_\text{补}$
	  \item $\because(-5)_{10}=(10000101)_\text{原}=(11111010)_\text{反}=(11111011)_\text{补}$\\
	    $\;\;3_{10}=(00000011)_\text{补}$
	  \item $\therefore$ -5与3的补码相加结果为：\\
	    $(11111011)_\text{补}+(00000011)_\text{补}=11111110$
	  这个结果刚好等于-2的补码
	\end{itemize}
    \end{itemize}
  }
   \renewcommand\currentblocktitle{\hypertarget{3-4}{2的补码加减单元}}
  \outonlyblock{
    \twocolumns[.4]{
      \outfigure{.99}{补码加减运算电路.png}
    }{
      \begin{itemize}
	\item 输入
	  \begin{enumerate}
	    \item a,b:两个待加/减的数，补码表示
	    \item sub:是否执行减法，0，执行加法a+b，1执行减法运算a-b
	  \end{enumerate}
	\item 输出
           \begin{enumerate}
	     \item s:和或差的补码
	     \item co:进位或借位
	   \end{enumerate}
      \end{itemize}
    }
  }
 \renewcommand\currentblocktitle{\hypertarget{3-3}{2的补码数相加时如何检测溢出}}
  \outonlyblock{
    \begin{itemize}
      \item 什么是补码加法运算的溢出\\
	当两个2的补码数送入全加器相加时，和的符号位是错误的现象\\
	\begin{tcolorbox}
	  求$(-7)_{10}+(-5)_{10}$，用4位全加器实现运算，先转换为2个4位补码(1001和1011），送入全加器，
	  得到和为0100，进位为1，和的符号位为正，而正确的符号位为负，因此，这个运算产生了溢出\\
	  若使用补码用4位全加器实现$(-5)_{10}+(-2)_{10}$，补码相加后和为1001，没有溢出
      \end{tcolorbox}	
    \end{itemize}
  }
  \outonlyblock{
    \twocolumns{
      \begin{itemize}
	\item 补码运算溢出的本质原因
	  \begin{tcolorbox}
	    运算结果超出了补码表示的范围
	  \end{tcolorbox}
	\item a+b什么情况下会产生溢出\\
	  满足如下两个条件之一：
	  \begin{enumerate}
	    \item a，b的符号位都是0（正数），且数值位的最高位产生进位信号1
	    \item a，b的符号位都是1（负数），且数值位的最高位产生进位信号0
	  \end{enumerate}
      \end{itemize}
    }{
      \begin{itemize}
	\item 如何检测溢出
	  \begin{enumerate}
	    \item 溢出用ovf变量表示（ovf=1表示溢出，ovf=0表示无溢出）
	    \item 数值位最高位进位信号用qs表示,全加器符号位进位用cout表示
	    \item 对于情形\step{1}:qs=1,cout=0,ovf=1
	    \item 对于情形\step{2}:qs=0,cout=1,ovf=1
	    \item 可见:$ovf=qs\oplus cout$
	    \item 故：只需将加法器的最高位全加器的cout与次高位全加器的cout接入一个异或门，输出作为是否溢出信号
	  \end{enumerate}
      \end{itemize}
    }[c]
  }
  \renewcommand\currentblocktitle{\hypertarget{3-4}{带溢出检测的2的补码加减单元}}
  \outonlyblock{
    \twocolumns{
      \outfigure{.99}{带溢出检测的补码加减运算电路.pdf}
    }{
      \begin{itemize}
	\item 输入
	  \begin{enumerate}
	    \item a,b:2个n位加数，补码表示
	    \item sub:是否做减法,1表示减法运算，0表示加法运算
	  \end{enumerate}
	\item 输出
	  \begin{enumerate}
	    \item S:加法结果，补码表示
	    \item ovf:是否溢出，1表示有溢出，0表示无溢出
	  \end{enumerate}
      \end{itemize}
    }[c]
  }
  \outonlyblock{
    \twocolumns{
      \outfigure{.99}{带溢出检测的补码加减运算电路.pdf}
    }{
      \outfigure{.99}{带溢出检测的补码加减运算电路模块.png}
    }[c]
  }
  \renewcommand\currentblocktitle{\hypertarget{3-5}{补码加/减单元电路的扩充使用}}
  \outonlyblock{
    \twocolumns[.4]{
      \begin{itemize}
	\item 实现数值比较
	  \begin{itemize}
	    \item 问题描述\\
	      如何利用补码运算，实现两个数a，b（位宽均为n）的比较？
	    \item 解决方法\\
              做补码运算a-b，判断其输出是否为零、符号位为0或1
	  \end{itemize}
      \end{itemize}
    }{
      \begin{itemize}
	\item  符号位扩展\\
	  \begin{itemize}
	    \item 问题描述\\
	      补码a(位宽为n)与补码b(位宽为m)相加，且n>m，要得到正确结果，如何把b进行符号位扩展得到
	      补码c(位宽为n)，使得$a+b=a+c$?
	    \item 解决方法\\
	      将b的符号位向左复制(n-m)次，即：
	      $\text{assign c =\{\{(n-m)\{b[m-1]\}\},b[m-1:0]\}}$
	  \end{itemize}
      \end{itemize}
    }
    \begin{itemize}
      \item 补码的移位
	\begin{itemize}
	  \item 右移：仅需复制符号位
	  \item 左移：检查溢出（在结果符号与输入符号不同时产生溢出）
	\end{itemize}
    \end{itemize}
  }
}
